package com.qingcheng.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.qingcheng.pojo.order.Order;
import com.qingcheng.service.order.OrderService;
import com.qingcheng.service.pay.WeiXinPayService;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

/**
 * Welcome to the most Amazing IntelliJ IIIDEA.
 * Creat0r: ^_^ fffantianxing ^_^
 * Date: 2019-07-21
 * Time: 16:09
 */
@RestController
@RequestMapping("wxpay")
public class PayController {

    @Reference
    private WeiXinPayService weiXinPayService;
    @Reference
    private OrderService orderService;

    @GetMapping("createNative")
    public Map createNative(String orderId) {
        String name = SecurityContextHolder.getContext().getAuthentication().getName();//当前登陆用户
        Order order = orderService.findById(orderId);
        if (order != null) {//订单存在
            if ("0".equals(order.getOrderStatus()) && "0".equals(order.getPayStatus()) && name.equals(order.getUsername())) {
                return weiXinPayService.createNative(orderId, order.getPayMoney(), "http://aaace.easy.echosite.cn/wxpay/notify.do");
            } else {
                return null;
            }

        } else {
            return null;
        }

    }

    @RequestMapping("notify")
    public void notifyLogic(HttpServletRequest request) {

        System.out.println("支付回调开始");

        try {
            InputStream inputStream = (InputStream)request.getInputStream();
            ByteArrayOutputStream outputStream=new ByteArrayOutputStream();

            byte[] buffer=new byte[1024];
            int len=0;
            while( ( len= inputStream.read(buffer) )!=-1   ){
                outputStream.write( buffer,0,len );
            }
            outputStream.close();
            inputStream.close();
            String result=new String( outputStream.toByteArray(),"utf-8" );
            System.out.println(result);
            weiXinPayService.notifyLogic(result);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
